 /*******************************************************************************
  * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/

 package org.eclipse.osgi.framework.internal.core;

 import org.eclipse.osgi.framework.adaptor.FrameworkAdaptor;

 /**
  * Main class for the OSGi framework. This class is used to start the framework for production use.
  * Objects of this class represent an instance of the OSGi framework and
  * can be used to control the framework.
  */
 public class OSGi {
     protected Framework framework;

     /**
      * Constructs an OSGi object with the specified FrameworkAdaptor.
      * This method creates an OSGi framework.
      *
      * @param adaptor An adaptor object for the framework to use.
      */
     public OSGi(FrameworkAdaptor adaptor) {
         framework = createFramework(adaptor);
     }

     /**
      * Destroy the OSGi framework. This method stops the framework if
      * it has been started. All resources associated with the framework
      * are release and the OSGi object is no longer usable.
      *
      */
     public void close() {
         framework.close();
     }

     /**
      * Start the framework.
      *
      * The framework is started as described in the OSGi Framework
      * specification.
      */
     public void launch() {
         framework.launch();
     }

     /**
      * Stop the framework.
      *
      * The framework is stopped as described in the OSGi Framework
      * specification.
      */
     public void shutdown() {
         framework.shutdown();
     }

     /**
      * This method returns the state of the OSGi framework.
      *
      * @return true of the framework is launched, false if shutdown.
      */
     public boolean isActive() {
         return (framework.isActive());
     }

     /**
      * Retrieve the BundleContext for the system bundle.
      *
      * @return The system bundle's BundleContext.
      */
     public org.osgi.framework.BundleContext getBundleContext() {
         return (framework.systemBundle.getContext());
     }

     /**
      * Create the internal framework object.
      * This method can be overridden to create a secure framework.
      *
      * @param adaptor FrameworkAdaptor object for the framework.
      * @return New Framework object.
      */
     protected Framework createFramework(FrameworkAdaptor adaptor) {
         return (new Framework(adaptor));
     }

     /**
      * Display the banner to System.out.
      *
      */
     protected void displayBanner() {
         System.out.println();
         System.out.print(Msg.ECLIPSE_OSGI_NAME);
         System.out.print(" "); //$NON-NLS-1$
 System.out.println(Msg.ECLIPSE_OSGI_VERSION);
         System.out.println();
         System.out.println(Msg.OSGI_VERSION);
         System.out.println();
         System.out.println(Msg.ECLIPSE_COPYRIGHT);
     }
 }

